/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package trabalho1;

public class PasswordChecker01 implements InterfaceProcessaPassword {

    public char simbs[] = {'!','@','#','$','%','%','^','&','*','?','_','~'};    
    
    @Override
    public int pontuarSenha(String password){
       int pontos = 0;
        
        if (password.length()<5){
            pontos +=3;
        }
        else if (password.length()>4 && password.length()<8)
        {
            pontos +=6;
        }
        else if (password.length()>7 && password.length()<16)
        {
            pontos +=12;
        }
        else if (password.length()>15)
        {
            pontos +=18;
        }
        
        pontos += pontuarLetras(password)+ pontuarDigitos(password)+pontuarSimbolos(password)+ pontuarBonus(password);
        
    return pontos;
    }
    
    public int pontuarMinusculas(String password){
       int pontos = 0;
        
        for (char a : password.toCharArray())
        {
            if (Character.isLowerCase(a)) {
                      pontos += 1;
                      break;
              }
        }
        return pontos;
    
    }
       
    public int pontuarMaiusculas(String password){
        int pontos = 0;
        
        for (char a : password.toCharArray())
        {
            if (Character.isUpperCase(a)) {
                      pontos += 5;
                        break;
             }
        }
        return pontos;
    }
    
    public int pontuarSimbolos(String password){
    
     boolean existSimbol = false;
     int counter = 0;
        
        for (int i = 0; i < password.length(); i++){
            
            for (int j = 0; j < simbs.length; j++){
                
                if (password.charAt(i) == simbs[j])
                {
                    System.out.println("simbs = "+simbs[j]);
                    existSimbol = true;
                    counter++;
                }
            }
        }
        if (existSimbol == false)
            return 0;
       
        return (counter>1)? 10:5;
    }
    
    
    public int pontuarLetras(String password){
        return pontuarMaiusculas(password)+pontuarMinusculas(password);
    }
    
    public int temDigitos(String password){
        int pontos=0;
        for (char a : password.toCharArray())
        {
            if (Character.isDigit(a))
            {
                pontos +=5;
                break;
            }
         }
        return pontos;
    }
    
    public int pontuarDigitos(String password){
        int counter = 0;
        for (char a : password.toCharArray())
        {
            if (Character.isDigit(a))
               counter++;
        }
        if (counter>2){
            return temDigitos(password)+3;
        } 
        else return temDigitos(password);
    }
    
    
    public int pontuarBonusParcial(int funcao1, int funcao2){
        return (funcao1>0 && funcao2>0)? 2:0;
    }
    
    @Override
    public int pontuarBonus(String password){
        int bonus = 0;
        bonus += pontuarBonusParcial(pontuarMaiusculas(password),pontuarMinusculas(password));  //Bonus Letras Maiusculas com minusculas
        bonus += pontuarBonusParcial(pontuarLetras(password),temDigitos(password)); ///Bonus Letras + Digitos
        if (pontuarLetras(password)>0||temDigitos(password)>0){ 
           bonus += pontuarBonusParcial(2, pontuarSimbolos(password)); //Bonus (Letras ou Digitos) + Simbolos
        }
        return bonus;
    }
        
    @Override
    public String classificaSenha(int pontos){
        
        if (pontos>=15 && pontos<25){
            System.out.println("Pontuação = "+pontos+";");
            return "Fraca";
        }else if (pontos>=25 && pontos<35){
            System.out.println("Pontuação = "+pontos+";");
            return "Media";
           
        }else if (pontos>=35 && pontos<45){
            System.out.println("Pontuação = "+pontos+";");
            return "Forte";
        }else if (pontos>=45){
            System.out.println("Pontuação = "+pontos+";");
            return "Muito Forte";
         }
        System.out.println("Pontuação = "+pontos+";");
        return "Muito Fraca";
    }
    
    public void imprimirSenha(int pontos){
        System.out.println(classificaSenha(pontos));
    }
    
    
}
